#include "BulletDynamics/ConstraintSolver/btJacobianEntry.h"
#ifdef __cplusplus
extern "C" {
#endif
btJacobianEntry* bullet_NewbtJacobianEntry(){
	btJacobianEntry* wrap_out = new btJacobianEntry();
	return wrap_out;
}

btJacobianEntry* bullet_NewbtJacobianEntry1(btMatrix3x3* world2A,btMatrix3x3* world2B,btVector3* rel_pos1,btVector3* rel_pos2,btVector3* jointAxis,btVector3* inertiaInvA,double massInvA,btVector3* inertiaInvB,double massInvB){
	btMatrix3x3 const& c_arg_world2A=(btMatrix3x3 const&)(*world2A);
	btMatrix3x3 const& c_arg_world2B=(btMatrix3x3 const&)(*world2B);
	btVector3 const& c_arg_rel_pos1=(btVector3 const&)(*rel_pos1);
	btVector3 const& c_arg_rel_pos2=(btVector3 const&)(*rel_pos2);
	btVector3 const& c_arg_jointAxis=(btVector3 const&)(*jointAxis);
	btVector3 const& c_arg_inertiaInvA=(btVector3 const&)(*inertiaInvA);
	btScalar const c_arg_massInvA=massInvA;
	btVector3 const& c_arg_inertiaInvB=(btVector3 const&)(*inertiaInvB);
	btScalar const c_arg_massInvB=massInvB;
	btJacobianEntry* wrap_out = new btJacobianEntry(c_arg_world2A,c_arg_world2B,c_arg_rel_pos1,c_arg_rel_pos2,c_arg_jointAxis,c_arg_inertiaInvA,c_arg_massInvA,c_arg_inertiaInvB,c_arg_massInvB);
	return wrap_out;
}

btJacobianEntry* bullet_NewbtJacobianEntry2(btVector3* jointAxis,btMatrix3x3* world2A,btMatrix3x3* world2B,btVector3* inertiaInvA,btVector3* inertiaInvB){
	btVector3 const& c_arg_jointAxis=(btVector3 const&)(*jointAxis);
	btMatrix3x3 const& c_arg_world2A=(btMatrix3x3 const&)(*world2A);
	btMatrix3x3 const& c_arg_world2B=(btMatrix3x3 const&)(*world2B);
	btVector3 const& c_arg_inertiaInvA=(btVector3 const&)(*inertiaInvA);
	btVector3 const& c_arg_inertiaInvB=(btVector3 const&)(*inertiaInvB);
	btJacobianEntry* wrap_out = new btJacobianEntry(c_arg_jointAxis,c_arg_world2A,c_arg_world2B,c_arg_inertiaInvA,c_arg_inertiaInvB);
	return wrap_out;
}

btJacobianEntry* bullet_NewbtJacobianEntry3(btVector3* axisInA,btVector3* axisInB,btVector3* inertiaInvA,btVector3* inertiaInvB){
	btVector3 const& c_arg_axisInA=(btVector3 const&)(*axisInA);
	btVector3 const& c_arg_axisInB=(btVector3 const&)(*axisInB);
	btVector3 const& c_arg_inertiaInvA=(btVector3 const&)(*inertiaInvA);
	btVector3 const& c_arg_inertiaInvB=(btVector3 const&)(*inertiaInvB);
	btJacobianEntry* wrap_out = new btJacobianEntry(c_arg_axisInA,c_arg_axisInB,c_arg_inertiaInvA,c_arg_inertiaInvB);
	return wrap_out;
}

btJacobianEntry* bullet_NewbtJacobianEntry4(btMatrix3x3* world2A,btVector3* rel_pos1,btVector3* rel_pos2,btVector3* jointAxis,btVector3* inertiaInvA,double massInvA){
	btMatrix3x3 const& c_arg_world2A=(btMatrix3x3 const&)(*world2A);
	btVector3 const& c_arg_rel_pos1=(btVector3 const&)(*rel_pos1);
	btVector3 const& c_arg_rel_pos2=(btVector3 const&)(*rel_pos2);
	btVector3 const& c_arg_jointAxis=(btVector3 const&)(*jointAxis);
	btVector3 const& c_arg_inertiaInvA=(btVector3 const&)(*inertiaInvA);
	btScalar const c_arg_massInvA=massInvA;
	btJacobianEntry* wrap_out = new btJacobianEntry(c_arg_world2A,c_arg_rel_pos1,c_arg_rel_pos2,c_arg_jointAxis,c_arg_inertiaInvA,c_arg_massInvA);
	return wrap_out;
}

double bullet_btJacobianEntry_getDiagonal(btJacobianEntry* c_this){
	btScalar c_out = c_this->getDiagonal();
	double wrap_out = (c_out);
	return wrap_out;
}

btVector3* bullet_btJacobianEntry_GetFieldOfM_0MinvJt(btJacobianEntry* c_this){
	return (btVector3*)(&c_this->m_0MinvJt);
}

btVector3* bullet_btJacobianEntry_GetFieldOfM_1MinvJt(btJacobianEntry* c_this){
	return (btVector3*)(&c_this->m_1MinvJt);
}

double bullet_btJacobianEntry_GetFieldOfM_Adiag(btJacobianEntry* c_this){
	return (double)(c_this->m_Adiag);
}

btVector3* bullet_btJacobianEntry_GetFieldOfM_aJ(btJacobianEntry* c_this){
	return (btVector3*)(&c_this->m_aJ);
}

btVector3* bullet_btJacobianEntry_GetFieldOfM_bJ(btJacobianEntry* c_this){
	return (btVector3*)(&c_this->m_bJ);
}

btVector3* bullet_btJacobianEntry_GetFieldOfM_linearJointAxis(btJacobianEntry* c_this){
	return (btVector3*)(&c_this->m_linearJointAxis);
}

double bullet_btJacobianEntry_getNonDiagonal(btJacobianEntry* c_this,btJacobianEntry* jacB,double massInvA){
	btJacobianEntry const& c_arg_jacB=(btJacobianEntry const&)(*jacB);
	btScalar const c_arg_massInvA=massInvA;
	btScalar c_out = c_this->getNonDiagonal(c_arg_jacB,c_arg_massInvA);
	double wrap_out = (c_out);
	return wrap_out;
}

double bullet_btJacobianEntry_getNonDiagonal1(btJacobianEntry* c_this,btJacobianEntry* jacB,double massInvA,double massInvB){
	btJacobianEntry const& c_arg_jacB=(btJacobianEntry const&)(*jacB);
	btScalar const c_arg_massInvA=massInvA;
	btScalar const c_arg_massInvB=massInvB;
	btScalar c_out = c_this->getNonDiagonal(c_arg_jacB,c_arg_massInvA,c_arg_massInvB);
	double wrap_out = (c_out);
	return wrap_out;
}

double bullet_btJacobianEntry_getRelativeVelocity(btJacobianEntry* c_this,btVector3* linvelA,btVector3* angvelA,btVector3* linvelB,btVector3* angvelB){
	btVector3 const& c_arg_linvelA=(btVector3 const&)(*linvelA);
	btVector3 const& c_arg_angvelA=(btVector3 const&)(*angvelA);
	btVector3 const& c_arg_linvelB=(btVector3 const&)(*linvelB);
	btVector3 const& c_arg_angvelB=(btVector3 const&)(*angvelB);
	btScalar c_out = c_this->getRelativeVelocity(c_arg_linvelA,c_arg_angvelA,c_arg_linvelB,c_arg_angvelB);
	double wrap_out = (c_out);
	return wrap_out;
}

#ifdef __cplusplus
}
#endif
